package edu.dayu.demo4;

import java.util.HashMap;
import java.util.Map;

/**
 * 输入: s = "abcabcbb"
 * 输出: 3
 * 解释: 因为无重复字符的最长子字符串是 "abc"，所以其长度为 3。
 *
 * 思路： 子串，连续，滑动窗口？ 那么问题就变成了怎么判断重复？
 *       用 hash 判断吗， hash 字符为 key ，位置为 value，这样就可以知道下一次从哪里开始滑了。
 */
public class 不含重复字符的最长子字符串 {
    public static void main(String[] args) {
        String s = "abba";
        System.out.println(lengthOfLongestSubstring(s));
    }

    public static int lengthOfLongestSubstring(String s) {
        int max = 0;
        Integer integer = -1;
        char[] chars = s.toCharArray();
        Map<Character,Integer> map  = new HashMap<>();
        for (int i = 0; i < chars.length; i++) {
            if (map.containsKey(chars[i])){
                integer = Math.max(map.get(chars[i]),integer);
            }
            if (max<i-integer)
                max = i-integer;
            map.put(chars[i],i);
        }
        return max;
    }
}
